package 中等.模拟;

/**
 * 有个内含单词的超大文本文件，给定任意两个不同的单词，找出在这个文件中这两个单词的
 * 最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次，而每次寻找的单词不同
 * ，你能对此优化吗?
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/find-closest-lcci
 */
public class 单词距离_17_11 {

    public static void main(String[] args) {

        String[] words = {"I", "am", "a", "student", "from", "a", "university", "in", "a", "city"};
        System.out.println(findClosest(words, "a", "student"));

    }

    /**
     * 两个单词的距离
     * 可能是 word1 word2 或者 word2 word1 的顺序
     * 当 word1 word2 的顺序时，遍历到 word2 时，前面遍历到 最后一个 word1 是最小距离
     * 当 word2 word1 的顺序时，遍历到 word1 时，前面遍历到 最后一个 word2 是最小距离
     *
     * @param words
     * @param word1
     * @param word2
     * @return
     */
    public static int findClosest(String[] words, String word1, String word2) {
        int minDistance = Integer.MAX_VALUE;
        int word1Idx = -1, word2Idx = -1;

        for (int i = 0; i < words.length; i++) {
            if (word1.equals(words[i])) word1Idx = i;
            if (word2.equals(words[i])) word2Idx = i;
            if (word1Idx != -1 && word2Idx != -1) {
                minDistance = Math.min(minDistance, Math.abs(word1Idx - word2Idx));
            }
        }
        return minDistance;
    }

}
